package insert;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import utility.connections;

public class insert_bene extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private String oracleUser = "azienda";
    private String oraclePwd  = "azienda";
    private Connection conn;
    private String driver,oracle;
    private Statement st=null;
    private ResultSet rs=null;
	
    public insert_bene() {
        super();
    }
    
    public void init(ServletConfig sc) throws ServletException
    {
    	super.init(sc);
		driver = "oracle.jdbc.driver.OracleDriver";
		oracle = "jdbc:oracle:thin:@localhost:1521:xe";
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			conn = DriverManager.getConnection(oracle, oracleUser, oraclePwd);
			conn.setAutoCommit(false);
			st = conn.createStatement();
			rs = null;
	
			String importo 			= "" + request.getParameter("txtImporto");
			String data_acquisto 	= "" + request.getParameter("txtDataAcquisto");
			String garanzia 		= request.getParameter("chkGaranzia")==null?"0":"1";
			String data_attivazione = "" + request.getParameter("txtDataAttivazione");
			String data_scadenza	= "" + request.getParameter("txtDataScadenza");
			String conforme			= request.getParameter("chkConforme")==null?"0":"1";
			String obsoleto			= request.getParameter("chkObsoleto")==null?"0":"1";
			String subcategoria		= "" + request.getParameter("cmbSubcat");
			String fornitore		= "" + request.getParameter("cmbFor");
			String targhetta		= request.getParameter("chkTarghetta")==null?"0":"1";
			String descrizione		= connections.doubleQuota("" + request.getParameter("txtDescrizione"));
			String codice 			= getNewCode();
			String seriale 			= getNewSerial(subcategoria);
			String qry				= null;
			
			qry = "insert into bene values ("+codice+",'"+seriale+"',"+importo+",to_date('"+data_acquisto+"','DD/MM/YYYY'),'"
			    + garanzia + "',to_date('"+data_attivazione+"','DD/MM/YYYY'),to_date('"+data_scadenza+"','DD/MM/YYYY'),'"
			    + conforme + "','"+obsoleto+"',"+subcategoria+","+fornitore+",'"+targhetta+"','"+descrizione+"')";
			System.out.println(qry);
			st.executeUpdate(qry);
			
			conn.commit();
			st.close();
			conn.close();
			
			response.sendRedirect("adm/ben/ins_bene.jsp?commit=1");
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	private String getNewCode()
	{
		String code=null;
		int tmpCode=0;
		try {
			ResultSet rs = st.executeQuery("select max(numeroinventariogenerico) from bene");
			rs.next();
			tmpCode=rs.getInt(1)+1;
			code="" + tmpCode;
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
			code="1";
		}
		return code;
	}
	
	private String getNewSerial(String subcat)
	{
		String code		= null;
		String cat		= null;
		ResultSet rs	= null;
		int newCode		= 0;
	
		int tmpCode=0;
		System.out.println("LA SOTTOCATEGORIA E':" + subcat);
		try {//Prelevo la categoria di appartenenza
			rs = st.executeQuery("select categoriabene from sottocategoriabene where codice = " + subcat);
			rs.next();
			cat=rs.getString(1);
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			return null;
		}
		
		try {//Prelevo l'ultimo numero seriale rispetto alla categoria
			rs = st.executeQuery("select numero from seriali where categoria = '"+cat+"'");
			rs.next();
			tmpCode=rs.getInt(1)+1;
			code="" + tmpCode + "/" + cat;
			rs.close();
			
			//Aggiorno il seriale
			st.executeUpdate("update seriali set numero = "+ tmpCode + " where categoria = '" + cat + "'");
			
		} catch (SQLException e) {//Non esiste la categoria nella tabella seriali
			e.printStackTrace();
			code="1/"+cat;
			tmpCode=1;
			
			try{//Prelevo l'ultimo codice disponibile
				rs = st.executeQuery("select max(codice) from seriali");
				rs.next();
				newCode=rs.getInt(1)+1;
				rs.close();
			} catch (SQLException e2) {
				e2.printStackTrace();
				newCode=1;
			}
			
			try {//Creo il codice seriale nella tabella seriali
				st.executeUpdate("insert into seriali values ("+ newCode + ",'"+ cat + "',"+ tmpCode);
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		return code;
	}
}
